package org.ala.tiktools.rpc.kcp.protocol.tools;

import org.ala.tiktools.rpc.kcp.protocol.Kcp;

/**
 * kcp指标记录
 *
 * @author ala
 * @date 2025-04-13 22:51
 */
public class KcpMetric {
    /**
     *  绑定kcp
     */
    protected Kcp kcp;
    /**
     *  当前最大xmit
     */
    protected int maxSegXmit;
    /**
     *  当前总xmit次数
     */
    protected int xmit;


    public KcpMetric(Kcp kcp) {
        this.kcp = kcp;
    }


    public int rxSrtt() {
        return kcp.getRto().getRxSrtt();
    }
    public int rxRttval() {
        return kcp.getRto().getRxRttvar();
    }
    public int rto() {
        return kcp.getRto().getRxRto();
    }
    public long sndNxt() {
        return kcp.getSender().getSndNxt();
    }
    public long sndUna() {
        return kcp.getSender().getSndUna();
    }
    public long rcvNxt() {
        return kcp.getReceiver().getRcvNxt();
    }
    public int cwnd() {
        return kcp.getCongestion().getCwnd();
    }
    public int getMaxSegXmit() {
        return maxSegXmit;
    }
    public void maxSegXmit(int xmit) {
        maxSegXmit = Math.max(maxSegXmit, xmit);
    }
    public void incrXmit() {
        xmit++;
    }
    public void setMaxSegXmit(int maxSegXmit) {
        this.maxSegXmit = maxSegXmit;
    }
    public int getXmit() {
        return xmit;
    }
    public void setXmit(int xmit) {
        this.xmit = xmit;
    }


    public String toString() {
        return String.format("kcp:{conv:%d, rxSrtt:%d, rxRttval:%d, rto:%d, sndNxt:%d, sndUna:%d, rcvNxt:%d, cwnd:%d, maxSegXmit:%d, xmit:%d}",
                kcp.getConv(),
                rxSrtt(), rxRttval(), rto(),
                sndNxt(), sndUna(), rcvNxt(),
                cwnd(),
                getMaxSegXmit(), getXmit());
    }
}
